home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
201-220
/
scopedisk214
/
req
/
req.c
< prev
next >
Wrap
C/C++ Source or Header
|
1995-03-19
|
3KB
|
105 lines
/* ASL File Requester Shell for CLI Commands,
© 1991 Arnie Cachelin, HyperActive InterMedia */
/* 24 Sep 1991 At 21:56:39 */
#include <exec/types.h>
#include <exec/exec.h>
#include <intuition/intuition.h>
#include <libraries/dos.h>
#include <libraries/asl.h>
#include <workbench/startup.h>
#include <workbench/workbench.h>
#include <workbench/icon.h>
#include <proto/intuition.h>
#include <proto/exec.h>
#include <proto/icon.h>
/* #include <proto/asl.h> */
#include <stdio.h>
struct IntuitionBase *IntuitionBase=NULL;
struct AslBase *AslBase=NULL;
struct IconBase *IconBase=NULL;
struct FileRequester *req=NULL;
extern struct FileHandle *Open(),*Output();
extern struct WBStartup *WBenchMsg;
struct FileHandle *DOSOut=NULL,*DOSIn=NULL;
void CleanUp()
{
if(DOSOut) Close(DOSOut);
if(req) FreeAslRequest(req);
if(IconBase) CloseLibrary(IconBase);
if(AslBase) CloseLibrary(AslBase);
if(IntuitionBase) CloseLibrary(IntuitionBase);
exit(0L);
}
int main(argc,argv)
int argc;
char *argv[];
{
char Title[82]="Hello Sailor!",Command[255],dir[80]="",*file="";
int i,n;
struct DiskObject *dob;
if (argc==1)
{ /* Called w/out args from CLI */
printf("
USAGE:
%s <FileCommand>\n",argv[0]);
puts(" FileCommand is the command to be executed.");
puts(" The selected path and file will replace alternating");
puts(" occurances of '%s' as in the DOS List LFORMAT command.");
puts(" ( e.g. FileReq \"C:ShowPic %s%s NOCYCLE\" ) ");
DOSOut=NULL;
CleanUp();
}
IntuitionBase = (struct IntuitionBase *) OpenLibrary("intuition.library",0);
if (IntuitionBase==0) CleanUp();
IconBase=(struct IconBase *) OpenLibrary("icon.library",0);
if (IconBase==0) CleanUp();
AslBase=(struct AslBase *) OpenLibrary("asl.library",0);
if (AslBase==0) CleanUp();
req=(struct FileRequester *)AllocAslRequestTags(ASL_FileRequest,ASL_Hail,Title,TAG_DONE);
if (req==NULL) CleanUp();
if(argc>1)
{ /* Called with args from CLI */
sprintf(Title,argv[1],"Dir:","File");
DOSOut = Output();
if(argc>2)
{ strcpy(dir,argv[2]);
if(argc>3) file=argv[3];
}
if (!AslRequest(req,ASL_Hail,Title,ASL_Dir,dir,ASL_File,file,TAG_END)) CleanUp();
strcpy(dir,req->rf_Dir);
n=strlen(dir);
if( n && ( (char)dir[n-1]!=':') ) strcat(dir,"/");
sprintf(Command,argv[1],dir,req->rf_File,dir,req->rf_File,dir,req->rf_File);
puts(Command);
Execute(Command,DOSIn,DOSOut);
DOSOut=NULL;
CleanUp();
}
else
if(WBenchMsg->sm_NumArgs>0)
if(dob=(struct DiskObject *)GetDiskObject(WBenchMsg->sm_ArgList->wa_Name))
{
if(!(DOSOut = Open(FindToolType(dob->do_ToolTypes,"WINDOW"),MODE_NEWFILE)))
DOSOut = Open("CON:0/12/638/132/Command Output Window " ,MODE_NEWFILE);
sprintf(Title,dob->do_ToolTypes[0],"Dir:","File");
if (AslRequest(req,ASL_Hail,Title,TAG_END))
for(i=0;strlen(dob->do_ToolTypes[i])>0;i++)
{
strcpy(dir,req->rf_Dir);
n=strlen(dir); /* What a pain! why doesn't string include '/' or ':' */
if( n && ((char)dir[n-1]!=':') ) strcat(dir,"/");
sprintf(Command,dob->do_ToolTypes[i],dir,req->rf_File,dir,req->rf_File,dir,req->rf_File);
Execute(Command,DOSIn,DOSOut);
}
FreeDiskObject(dob);
}
CleanUp();
}